package br.com.equus.bean;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import br.com.arquitetura.bean.PaginableBean;
import br.com.arquitetura.excecao.ExcecaoUtil;
import br.com.arquitetura.util.ComboUtil;
import br.com.equus.entidade.Animal;
import br.com.equus.entidade.MovimentacaoAnimal;
import br.com.equus.entidade.Situacao;

@ManagedBean(name = "movimentacaoBean")
@ViewScoped
public class MovimentacaoBean extends PaginableBean<MovimentacaoAnimal> {

	private static final long serialVersionUID = 1L;

	private List<SelectItem> listaSituacao;
	private Integer idSituacao;
	private Animal animal;

	public MovimentacaoBean() {
	}

	@Override
	public void verificarAcesso() {
		acessoBean.bloquearTela("ROLE_MOVIMENTACAO");
	}

	@SuppressWarnings("unchecked")
	@PostConstruct
	public void carregarListas() {
		try {
			Integer idAnimal = (Integer) getSessionMap().get("idAnimal");
			if (idAnimal != null) {
				animal = (Animal) universalManager.get(Animal.class, idAnimal);
			}

			listaSituacao = ComboUtil.getItens(universalManager.listBy(new Situacao(true)));
			Collections.sort(listaSituacao, new Comparator<SelectItem>() {
				@Override
				public int compare(SelectItem o1, SelectItem o2) {
					return o1.getLabel().compareTo(o2.getLabel());
				}
			});
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}

	}

	@Override
	public String load() {
		try {
			super.load();
			idSituacao = getModel().getSituacao().getId();
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}
		return SUCCESS;
	}

	@Override
	public String save() {
		try {

			getModel().setSituacao((Situacao) universalManager.get(Situacao.class, idSituacao));
			getModel().setAnimal(new Animal(animal.getId()));

			super.save();

			setModel(new MovimentacaoAnimal());
			idSituacao = null;
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}

		return SUCCESS;
	}

	@SuppressWarnings("unchecked")
	public String limparTela() {
		getSessionMap().put("idAnimal", animal.getId());
		return redirect("movimentacao.jsf");
	}

	@Override
	public MovimentacaoAnimal createModel() {
		return new MovimentacaoAnimal();
	}

	@Override
	public String getQualifiedName() {
		return "Movimentação Animal";
	}

	@Override
	public boolean isFeminino() {
		return false;
	}

	@Override
	public Map<String, String> getFilters() {
		if (animal != null && animal.getId() != null) {
			this.filters.put("animal.id", animal.getId().toString());
		} else {
			this.filters.put("animal.id", "0");
		}
		return this.filters;
	}

	public List<SelectItem> getListaSituacao() {
		return listaSituacao;
	}

	public void setListaSituacao(List<SelectItem> listaSituacao) {
		this.listaSituacao = listaSituacao;
	}

	public Animal getAnimal() {
		return animal;
	}

	public void setAnimal(Animal animal) {
		this.animal = animal;
	}

	public Integer getIdSituacao() {
		return idSituacao;
	}

	public void setIdSituacao(Integer idSituacao) {
		this.idSituacao = idSituacao;
	}

}
